home *** CD-ROM | disk | FTP | other *** search
- /*
- File: USBTabletModuleCDM.c
-
- Contains: HID Emulation glue code between the ADB SHIM and the USB Wacom HID Module
-
- Version: xxx put version here xxx
-
- Copyright: © 1998 by Apple Computer, Inc., all rights reserved.
-
- */
-
- #include <Types.h>
- #include <Devices.h>
- #include <DriverServices.h>
- #include <CursorDevices.h>
- #include <USB.h>
-
-
- #include "USBTabletModule.h"
-
- extern usbWacomPBStruct myWacomPB;
-
- void NotifyCursorDeviceManager(UInt32 refcon, void * theData)
- {
- #pragma unused (refcon)
-
- USBHIDDataPtr pWacomData;
- static UInt16 oldbuttons = 0;
- UInt16 changedbuttons = 0;
-
- // DebugStr("\pIn NotifyCursorDeviceManager");
- pWacomData = (USBHIDDataPtr)theData;
-
- // Tell the Cursor Device Manager that we moved
- if ((pWacomData->mouse.XDelta != 0) || (pWacomData->mouse.YDelta !=0))
- {
- if (pWacomData->mouse.XDelta > 127)
- pWacomData->mouse.XDelta = 127;
-
- if (pWacomData->mouse.YDelta > 127)
- pWacomData->mouse.YDelta = 127;
-
- if (pWacomData->mouse.YDelta < -127)
- pWacomData->mouse.YDelta = -127;
-
- if (pWacomData->mouse.XDelta < -127)
- pWacomData->mouse.XDelta = -127;
- CursorDeviceMove(myWacomPB.pCursorDeviceInfo, pWacomData->mouse.XDelta, pWacomData->mouse.YDelta);
- }
-
- // Update with the state of the buttons.
- pWacomData->mouse.buttons &= 0x03;
- changedbuttons = oldbuttons ^ pWacomData->mouse.buttons;
- if (changedbuttons)
- {
- CursorDeviceButtons(myWacomPB.pCursorDeviceInfo, (short)pWacomData->mouse.buttons);
- }
- oldbuttons = pWacomData->mouse.buttons;
- }
-
- OSStatus API_InstallInterrupt(HIDInterruptProcPtr HIDInterruptFunction, UInt32 refcon)
- {
- USBExpertStatus(myWacomPB.deviceRef, "\pUSBHIDWacomModule: Demo Mode Disabled (interrupt service routine installed)", myWacomPB.deviceRef);
- myWacomPB.refcon = refcon;
- myWacomPB.pSHIMInterruptRoutine = HIDInterruptFunction;
- return noErr;
- }
-
- OSStatus API_PollDevice(void)
- {
- return kUSBInternalErr;
- }
-
- OSStatus API_ControlDevice(UInt32 theControlSelector, void * theControlData)
- {
- #pragma unused (theControlData)
-
- switch (theControlSelector)
- {
- case kHIDRemoveInterruptHandler:
- myWacomPB.refcon = nil;
- myWacomPB.pSavedInterruptRoutine = nil;
- myWacomPB.pSHIMInterruptRoutine = nil;
- break;
-
- case kHIDEnableDemoMode:
- USBExpertStatus(myWacomPB.deviceRef, "\pUSBHIDWacomModule: Demo Mode Enabled", myWacomPB.deviceRef);
-
- if (myWacomPB.pCursorDeviceInfo == 0)
- {
- myWacomPB.pCursorDeviceInfo = &myWacomPB.cursorDeviceInfo;
- CursorDeviceNewDevice(&myWacomPB.pCursorDeviceInfo);
-
- CursorDeviceSetAcceleration(myWacomPB.pCursorDeviceInfo, (Fixed)(1<<16));
-
- CursorDeviceSetButtons(myWacomPB.pCursorDeviceInfo, 2); // should actually be set by reading
- // the HID descriptor, but lacking
- // a parser, we'll just force it
- // this way.
- CursorDeviceButtonOp(myWacomPB.pCursorDeviceInfo, 0, kButtonSingleClick, 0L);
- CursorDeviceButtonOp(myWacomPB.pCursorDeviceInfo, 1, kButtonSingleClick, 0L);
- CursorDeviceUnitsPerInch(myWacomPB.pCursorDeviceInfo, (Fixed)(myWacomPB.unitsPerInch));
- }
-
- myWacomPB.pSavedInterruptRoutine = myWacomPB.pSHIMInterruptRoutine;
- myWacomPB.pSHIMInterruptRoutine = NotifyCursorDeviceManager;
- break;
-
- case kHIDDisableDemoMode:
- USBExpertStatus(myWacomPB.deviceRef, "\pUSBHIDWacomModule: Demo Mode Disabled", myWacomPB.deviceRef);
- if (myWacomPB.pCursorDeviceInfo != 0)
- {
- CursorDeviceDisposeDevice(myWacomPB.pCursorDeviceInfo);
- myWacomPB.pCursorDeviceInfo = 0;
- }
- myWacomPB.pSHIMInterruptRoutine = myWacomPB.pSavedInterruptRoutine;
- break;
-
- default:
- return paramErr;
- }
- return noErr;
- }
-
-
-
- OSStatus API_GetDeviceInfo(UInt32 theInfoSelector, void * theInfo)
- {
- HIDInterruptProcPtr * pHIDIntProcPtr;
- UInt32 * pUnits;
- UInt32 * pInterruptRefcon;
-
- switch (theInfoSelector)
- {
- case kHIDGetDeviceUnitsPerInch:
- pUnits = (UInt32*)theInfo;
- *pUnits = (UInt32)(myWacomPB.unitsPerInch);
- break;
-
-
- case kHIDGetInterruptHandler:
- pHIDIntProcPtr = (HIDInterruptProcPtr *)theInfo;
- *pHIDIntProcPtr = myWacomPB.pSHIMInterruptRoutine;
- break;
-
- case kHIDGetInterruptRefcon:
- pInterruptRefcon = (UInt32 *)theInfo;
- *pInterruptRefcon = myWacomPB.refcon;
- break;
-
- default:
- return paramErr;
- }
- return noErr;
- }
-
- OSStatus API_EnterPolledMode(void)
- {
- return unimpErr;
- }
-
- OSStatus API_ExitPolledMode(void)
- {
- return unimpErr;
- }
-
- void ProcessInterruptReport(UInt32 devicetype, UInt8 hidReport[])
- {
- #pragma unused (devicetype)
-
- WacomReport *pTheWacomReport;
- USBHIDData theWacomData;
-
- static UInt16 prevXPosition = 0;
- static UInt16 prevYPosition = 0;
-
- UInt16 myXPosition, myYPosition;
- SInt16 myXDelta, myYDelta;
-
- pTheWacomReport = (WacomReport*)hidReport;
-
- pTheWacomReport->buttons &= 0x7f;
- if (pTheWacomReport->buttons)
- {
- theWacomData.mouse.buttons = 0x01;
- }
- else
- {
- theWacomData.mouse.buttons = 0;
- }
-
- myXPosition = pTheWacomReport->xPosition;
- myYPosition = pTheWacomReport->yPosition;
-
- myXDelta = (SInt16)(myXPosition - prevXPosition);
- myYDelta = (SInt16)(myYPosition - prevYPosition);
-
- prevXPosition = myXPosition;
- prevYPosition = myYPosition;
-
- theWacomData.mouse.XDelta = (SInt16)myXDelta;
- theWacomData.mouse.YDelta = (SInt16)myYDelta;
-
- if (myWacomPB.pSHIMInterruptRoutine)
- {
- (*myWacomPB.pSHIMInterruptRoutine)(myWacomPB.refcon, (void *)&theWacomData);
- }
- }
-
- USBHIDModuleDispatchTable TheHIDModuleDispatchTable =
- {
- (UInt32)0,
- (USBHIDInstallInterruptProcPtr)API_InstallInterrupt,
- (USBHIDPollDeviceProcPtr)API_PollDevice,
- (USBHIDControlDeviceProcPtr)API_ControlDevice,
- (USBHIDGetDeviceInfoProcPtr)API_GetDeviceInfo,
- (USBHIDEnterPolledModeProcPtr)API_EnterPolledMode,
- (USBHIDExitPolledModeProcPtr)API_ExitPolledMode
- };
-
- CursorDevicePtr gUSBWacom;
- CursorDevice ourDevice;
-
-